import scrapy
"""
2再通过改写 完成scrapyredis分布式爬取

分为两个大步
第一个大步 
    1.1 下包 pip install scrapy-redis
    1.2 导包  from scrapy_redis.spiders import RedisSpider
    1.3 继承  让你的爬虫类继承scrapyredis类 
    1.4 注释   注释 域名 以及 起始url
    1.5 设置   redis_key="变量"   在redis数据库 设置rediskey就需要以依照这个变量来 
    1.6 公式   复制文本文件的__init__方法   注意需要手动设置 爬虫类 
第二大步
    到settings.py设置里面来
    2.1将 除选中的配置 其他全部注释 
    2.2复制复制文本文件的 2settings.py设置 并且手动更改需要配置的参数 
第三大步
    运行 注意点 需要切换到 spider文件夹下   执行scrapy runspider 爬虫文件.py 命令
路径问题   
    设置scrapy路径 
    注释  from ..items import *
    写上 import os,sys
         sys.path.append(os.path.dirname(os.path.dirname(__file__)))
    from item import JindonItem
    

"""
#1.2 导包  from scrapy_redis.spiders import RedisSpider
from scrapy_redis.spiders import RedisSpider
# from ..items import *
# 1.3 继承  让你的爬虫类继承scrapyredis类
import os,sys
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
from items import JindonItem
class JdSpider(RedisSpider):
    name = 'jd'
    #    1.4 注释   注释 域名 以及 起始url
    # # 域名
    # allowed_domains = ['jd.com']
    # # 起始url
    # start_urls = ['https://search.jd.com/Search?keyword=%E5%9B%BE%E4%B9%A6&enc=utf-8&suggest=1.his.0.0&wq=&pvid=ac1ff7de49e14df8a7e6358e3ebf8ace']
    # 1.5 设置   redis_key="变量"
    redis_key = "dsa"
    def __init__(self, *args, **kwargs):
        domain = kwargs.pop('domain', "")
        self.allowed_domains = list(filter(None, domain.split(',')))
        super(JdSpider, self).__init__(*args, **kwargs)
    def parse(self, response):
        # 先获取六个图书节点
        big_nodes=response.xpath('//div[@id="J_container"]/div[1]/div')
        # 遍历六个节点  先取一个
        for big_node in big_nodes:
            item=JindonItem()
            # 获取名牌的字段
            big_name=big_node.xpath("./div/div[1]/strong/text()").get()
#             获取 二级墓里的链接   500个链接
            second_urls=big_node.xpath('./div/div[2]/div[2]/ul/li')
#             遍历每个连接进行回调
            for second_url in second_urls:
                # 店名
                second_name=second_url.xpath("./a/@title").get()

                second_link=second_url.xpath("./a/@href").get()
#                 对残缺的url进行拼接
                second_link="https://search.jd.com/"+second_link
                # 进行回调
                item["second_name"] = second_name
                item["second_link"] = second_link
                item["big_name"] = big_name
                yield scrapy.Request(url=second_link,callback=self.parse_second,meta={"初识NLTK.py":item})
    def parse_second(self,response):
        item=response.meta.get("初识NLTK.py")
        # 定位到包含每一本书的节点
        book_lists=response.xpath('//div[@id="J_goodsList"]/ul/li')
#         遍历每一本书  拿到对应的价格 和书名 以及 书的主页url
        for book_list in  book_lists:
            # 价格
            price=book_list.xpath('./div[1]/div[2]/strong/i/text()').get()
#             书名
            book_name=book_list.xpath('./div[1]/div[3]/a/em/text()').get()
#             书主页链接
            book_link=book_list.xpath('./div[1]/div[3]/a/@href').get()
            book_link="https:"+book_link
            item["price"]=price
            item["book_name"]=book_name
            item["book_link"]=book_link
            return item




